package com.sakura.system.controller.xycontroller;

import com.sakura.system.entity.xy.CinemaResult;
import com.sakura.system.entity.xy.Manager;
import com.sakura.system.service.impl.xyimpl.ManagerService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Date;

@CrossOrigin
@RestController
@RequestMapping("${app.router.url}")
public class ManagerController {
    @Resource
    ManagerService managerService;

    /**
     * 获取管理员数据的接口。
     * 根据提供的管理员ID（managerId）查询管理员信息。
     *
     * @param managerId 管理员的唯一标识符。
     * @return CinemaResult 对象，包含查询结果。如果查询成功，结果中包含管理员信息；如果失败，则包含错误信息。
     */
    @RequestMapping("getManagerData")
    public CinemaResult getManagerData(String managerId){
        // 通过managerId查询管理员信息
        return CinemaResult.ok(managerService.selectByManagerId(managerId));
    }


    /**
     * 管理员登录接口
     *
     * @param managerId 管理员ID，用于标识登录的管理员
     * @param password 管理员密码，用于验证管理员身份
     * @return 返回登录结果，如果登录成功，返回状态码200和"ok"信息；如果登录失败，返回状态码500和"error"信息
     */
    @RequestMapping("managerLogin")
    public CinemaResult managerLogin(String managerId, String password){
        // 调用managerService的managerLogin方法进行登录验证
        if (managerService.managerLogin(managerId, password) == null) {
            // 登录失败，返回错误信息
            return CinemaResult.build(500,"error");
        } else {
            // 登录成功，返回成功信息
            return CinemaResult.ok();
        }
    }

    /**
     * 管理员注册方法
     *
     * @param name 管理员名称，同时用作管理员ID
     * @param password 管理员密码
     * @return 该方法目前返回null，未来可能会返回注册结果
     */
    @PostMapping("managerReg")
    public CinemaResult managerReg(String name, String password){

        // 创建一个新的Manager实例用于注册
        Manager manager = new Manager();

        // 设置管理员的基本信息
        manager.setManagerId(name);
        manager.setName(name);
        manager.setPassword(password);
        manager.setRole("管理员");
        manager.setTime(new Date().toString());

        // 调用服务层方法，将管理员信息注册到系统中
        this.managerService.reg(manager);

        return null;

    }
}
